동현의 나불나불
백엔드
배포
docker, AWS, github action을 활용한 배포
github_actions_기초
prometheus_이론
kafka 공부
ch1.kafka 시작하기
언어
자바
java 인터페이스
java다형성
java예외
java추상화
java컬렉션
javaThread
프로젝트
바로그림
django-학습-핵심-정리
elasticsearch-검색과-데이터-파이프라인-정리
활용한 기술
바로그림-프로젝트-설계와-시행착오
회고록
백엔드_통합점검
오늘의 식사
Today I Learned
2026_04_15~2026_04_19
2026_04_15
2026_04_16
2026_04_17
2026_04_20~2026_04_27
2026_04_20
2026_04_21
2026_04_22
2026_04_23
2026_04_24
2026_04_27~2026_05_01
2026_04_27
2026_04_28
2026_04_29
2026_04_30
2026_05_01
2026_05_04~2026_05_08
2026_05_04
2026_05_05
2026_05_06
2026_05_07
2026_05_08
2026_05_11~2026_05_15
2026_05_11
2026_05_12
2026_05_13
2026_05_14
2026_05_15
2026_05_21~2026_05_22
2026_05_21
2026_05_22
2026_05_27~2026_05_30
2026_05_27
2026_06_TIL
2026_06_11
2026_06_15
2026_06_16
2026_06_22
2026_06_25
2026_06_26
2026_06_28
2026_07_TIL
cs
네트워크
네트워킹 하향식 접근
http 프로토콜
데이터베이스
DB_SQL기초
Lock_diffrent
웹
os
chapter1 운영체제 서론
chapter2 운영체제 구조
chapter3 프로세스 관리
Home
Contact
Copyright © 2024 |
Yankos
Home
>
Today I Learned
> 2026_05_27~2026_05_30
Now Loading ...
2026_05_27~2026_05_30
2026-05-27 일지
Docker 도커(Docker)는 애플리케이션을 구동하는 데 필요한 모든 환경(코드, 라이브러리, 설정 등)을 컨테이너(Container)라는 독립된 공간으로 패키징하여, 어느 환경에서나 빠르고 안정적으로 실행할 수 있게 해주는 오픈소스 가상화 플랫폼이다. 도커 레이어 구조 Base Layer : 리눅스 운영체제의 최소한의 핵심 기능만 제공하는 층. 변동이 불가하며 상태값을 가질 수 없다 Image Layer : 베이스 레이어 위로 명령어가 실행될 때마다 차곡차곡 생성되는 스냅샷들의 집합. 변동이 불가하며 상태값을 가질 수 없다. FROM 뒤에 나오는 RUN, COPY, ADD 같은 명령어들이 실행될 때마다 새로운 이미지 레이어가 한 층씩 빌드되어 올라갑니다 Container Layer : 내가 컨테이너 안에서 마음대로 쓰고 지울 수 있는 개인 연습장. 변동이 가능하고 , 상태값을 가질 수 있다 DockerFile 예시 FROM openjdk:21-slim : 베이스 레이어 WORKDIR /app : app 디렉토리를 만들어줌. 있으면 그거 사용 ARG JAR_FILE=build/libs/ *. Jar : jar file 변수 만듦 COPY ${JAR_FILE} app.jar : [왼쪽: 내 컴퓨터의 파일]을 [오른쪽: 도커 컨테이너 내부]로 복사하는 명령이다. ENTRYPOINT [ “java”, “-jar”, “app.jar” ] : 도커 이미지, 이 이미지로 컨테이너를 실행(run)할 때, 컨테이너가 켜지자마자 자동으로 실행할 메인 명령 Docker Container 1. 컨테이너의 본질: 프로세스(Process) 컨테이너 = 프로세스: 도커 컨테이너는 본질적으로 하나의 리눅스 프로세스이라고 볼 수가 있다. 프로세스의 정의: 프로그램(이미지)이 메모리에 올라가 실제로 작동하고 있는 상태를 의미한다. 프로세스가 끝나면 컨테이너도 종료: 컨테이너 내부에서 실행 중인 메인 프로세스(예: bash나 자바 앱)가 종료되면, 컨테이너도 자동으로 함께 종료된다. 2. 도커 컨테이너의 상태 (State) 프로세스는 멈추거나 켜질 수 있으므로, 컨테이너도 상황에 따라 다음과 같은 상태를 가집니다. ① Created (생성됨) 이미지를 컨테이너로 막 격리하여 만들었지만, 아직 실행은 되지 않은 준비 상태이다. 아직 아무런 프로세스가 돌고 있지 않기 때문에, 실제로 사용하려면 docker start를 해주어야 시작된다. ② Running (실행 중) docker run 명령어를 쓰면, 컨테이너가 Created 상태를 거쳐 곧바로 Running 상태로 훅 바뀐다. 프로세스가 활성화되어 열심히 일을 하고 있는 상태이다. ③ Paused (일시 정지) 컨테이너를 잠깐 멈춘 상태입니다. (컴퓨터의 ‘절전 모드’와 비슷합니다.) 프로세스에 할당된 메모리와 상태가 그대로 정지한다. 특징: 일시 정지된 동안 들어온 요청(큐)들은 버려지지 않고 쌓여있다가, 재개(unpaused)하는 순간 그동안 밀린 요청들이 한 번에 와르르 실행된다. ④ Stopped (중지됨) 프로세스를 아예 그만두고 완전히 종료한 상태입니다. (컴퓨터의 ‘시스템 종료’와 비슷합니다.) 특징: 아예 서비스가 내려간 상태이기 때문에, 일시 정지와 달리 외부에서 들어오는 그 어떤 요청도 받을 수 없습니다. 다시 켜려면 start를 해야 한다. 3. 컨테이너 삭제(rm)의 철칙 내 컴퓨터의 자원을 안전하게 보호하기 위해 도커는 컨테이너 삭제에 엄격한 규칙을 두게 된다. 💡 핵심 규칙: 컨테이너는 절대로 ‘실행 중(Running)’일 때 삭제할 수 없다! 삭제 가능한 상태: 반드시 컨테이너가 중지(Stopped/Exited)되어 있거나, 아직 시작도 안 한 생성(Created) 상태여야만 안전하게 삭제(docker rm)가 가능합니다. 실행 중 삭제하려면: 만약 구동 중인 컨테이너를 지우고 싶다면 반드시 먼저 중지(docker stop)를 시키거나, 강제 삭제 옵션(docker rm -f)을 사용해야 합니다. pause(정지) : 일시적으로 정지를 한 상태, 재개를 하면 기다렸던 것들이 한꺼번에 들어간다. stop(중지) : 재개를 할 수 없다. 재개시키고 싶다면 처음부터 다시 시작해야 한다. Docker Network Docker0 자동 생성되는 가상 공유기: docker0는 도커를 설치하면 기본으로 생성되어 컨테이너들을 바깥 세상과 연결해 주는 가상 공유기 역할을 합니다. 독립된 네트워크 공간: 각각의 컨테이너는 자신만의 독립된 네트워크 환경을 가진 채로 태어납니다. 랜선을 통한 상호 연결: 이렇게 독립된 컨테이너들이 docker0라는 중심 공유기에 가상 랜선으로 하나씩 연결되어 서로 안전하게 통신합니다. 도커 네트워크의 종류 Bridge Network : 하나의 Host에서 여러 컨테이너 통신. Docker0에 연결 되는 것 Host Network : Host와 동일한 네트워크에서 컨테이너 연결. 진짜 실행되고 있는 프로그램 처럼 None Network : 네트워크 없이 컨테이너의 lo만 사용. 고립됨. 통신 불가. Overlay Network : 분산 호스트 컨테이너 연결. 도커 컨테이너 커밋 구현으로 이미지 업데이트 만약 내가 새로운 환경에서 컨테이너를 구축하고 ubuntu를 사용할 때 기존 컨테이너에서 설치된 ubuntu 관련 프로그램들은 다 날라갈 것이다. 이러한 불상사를 방지하기 위해 docker에서 commit으로 이미지 업데이트를 하면 그 이미지에는 내가 다운받은 프로그램들이 반영된 ubuntu일 것이다. docker run -it –name my-ubt-1 ubuntu:24.04 bash 기존의 my-ubt-1 컨테이너를 실행 docker ps 도커의 컨테이너를 확인 docker commit 30e7426e46a my-ubt:latest 컨테이너의 id를 보고 이것을 이미지로 업데이트 docker run -it –name my-udt-2 my-ubt:latest bash 업데이트를 한 이미지를 새로운 컨테이너 my-udt-2로 실행
Today I Learned
· 2026-05-27
<
>
Touch background to close